/* Camera.h  -- Camera representation

Copyright (C) 2010 Gabriel Alises Cano, Javier Angulo Lucerón

This file is part of Computer Graphics : Final Project 09-10.

Computer Graphics : Final Project 09-10 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Computer Graphics : Final Project 09-10 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Computer Graphics : Final Project 09-10.  If not, see <http://www.gnu.org/licenses/>. */

#ifndef CAM_H
#define CAM_H

#include <GL/gl.h>
#include <iostream>
#include "Util.h"
#include <GL/glut.h>
#include <GL/glu.h>

class Camera
{
	private:
		/** brief: Position vector */
		GLdouble _pos[3];
		/** brief: Look vector */
		GLdouble _look[3];
		/** brief: Up vector */
		GLdouble _up[3];
	public:
		Camera (GLdouble *position, GLdouble *look, GLdouble *up);	
		GLdouble * pos();
		GLdouble pos_x() const;
		GLdouble pos_y() const;
		GLdouble pos_z() const;
		GLdouble * look();
		GLdouble look_x() const;
		GLdouble look_y() const;
		GLdouble look_z() const;
		GLdouble * up();
		GLdouble up_x() const;
		GLdouble up_y() const;
		GLdouble up_z() const;
		void set_pos(GLdouble, GLdouble, GLdouble);
		void set_pos_x(GLdouble);
		void set_pos_y(GLdouble);
		void set_pos_z(GLdouble);
		void set_up(GLdouble, GLdouble, GLdouble);
		void set_up_x(GLdouble);
		void set_up_y(GLdouble);
		void set_up_z(GLdouble);
		void set_look(GLdouble, GLdouble, GLdouble);
		void set_look_x(GLdouble);
		void set_look_y(GLdouble);
		void set_look_z(GLdouble);
		void place();
};
#endif
